package com.shxy.controller;

import com.shxy.common.entity.JsonResult;
import com.shxy.common.enums.ResultCode;
import com.shxy.common.utils.ResultTool;
import com.shxy.controller.ui.UserInfo;
import com.shxy.entity.user.Role;
import com.shxy.entity.user.User;
import com.shxy.service.IUserService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.stream.Collectors;

/**
 * 控制器
 */
@RestController
@RequestMapping("/api/user")
public class UserController {
    @Autowired
    private IUserService userService;

    /**
     * 检查用户登录
     * @param username
     * @param password
     * @param vcode
     * @param session
     * @return
     */
    @PostMapping("/login")
    public JsonResult<UserInfo> userLogin(String username, String password, String vcode, HttpSession session) {
        // 1、根据账号获取用户信息
        User user = userService.getUserByName(username);

        // 2、如果账号不存在，则返回错误
        if(user == null){
            return ResultTool.fail(ResultCode.USER_ACCOUNT_NOT_EXIST);
        }

        // 3、如果输入密码与用户密码不同，则返回错误
        if(!user.getPassword().equals(password.trim())) {
            return ResultTool.fail(ResultCode.USER_CREDENTIALS_ERROR);
        }

        // 4、返回用户的信息
        UserInfo userInfo = new UserInfo();
        BeanUtils.copyProperties(user, userInfo);
        userInfo.setRoles(user.getRoles().stream().map(Role::getName).collect(Collectors.toList()));
        return ResultTool.success(userInfo);
    }

    /**
     * 获取用户信息
     * @param id
     * @return
     */
    @GetMapping("/info")
    public JsonResult<UserInfo> userInfo(int id) {
        // 1、根据用户编号查询用户信息
        User user = userService.getUserById(id);

        // 2、如果用户信息为空，则返回错误
        if(user == null){
            return ResultTool.fail(ResultCode.PARAM_NOT_VALID);
        }

        UserInfo userInfo = new UserInfo();
        BeanUtils.copyProperties(user, userInfo);
        userInfo.setRoles(user.getRoles().stream().map(Role::getName).collect(Collectors.toList()));
        // 3、返回用户信息
        return ResultTool.success(userInfo);
    }

    /**
     * 用户登出
     * @return
     */
    @GetMapping("/logout")
    public JsonResult<Boolean> userLogout() {
        return ResultTool.success(true);
    }
}